﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using MEsE.NET.Serveripää;
using MEsE.NET.ExtMethods;
using System.Windows.Threading;
using MEsE.NET.Asetukset;

namespace MEsE.NET
{
    /// <summary>
    /// Interaction logic for Pääakkuna.xaml
    /// </summary>
    public partial class Pääakkuna : Window
    {
        App controller = App.Current as App;
        user kirjautunutKäyttäjä = null;

        public Pääakkuna(user User)
        {
            InitializeComponent();

            MEsE_WSClient serv = new MEsE_WSClient();

            kirjautunutKäyttäjä = User;

            kirjautunut.ItemsSource = new List<user>(new user[] { User });
            kirjautuneet.ItemsSource = serv.getKirjautuneet(User);

            ajastin.Interval = new TimeSpan(0, 0, 0, 2);
            ajastin.Tick += (s, e) =>
                {
                    user[] käyttäjät = serv.getKirjautuneet(User);

                    if (käyttäjät != null)
                    {
                        var käyttäjäKokoelma = käyttäjät.OrderBy(käyttäjä => käyttäjä.nayttönimi ?? "a");
                        Dispatcher.Invoke(DispatcherPriority.Normal,
                            new Action(() =>
                                {
                                    kirjautuneet.ItemsSource = käyttäjäKokoelma;
                                }));

                    }
                };
            ajastin.Start();

            using (PääikkunanKokoasetukset asetukset = new PääikkunanKokoasetukset())
            {
                Width = asetukset.MainWindowW;
                Height = asetukset.MainWindowH;
            }
        }

        DispatcherTimer ajastin = new DispatcherTimer();

        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //Tarkista muuttuuko tila user-oliossa
        }

        private void PersMes_TextChanged(object sender, TextChangedEventArgs e)
        {
            MEsE_WSClient client = new MEsE_WSClient();

            TextBox s = sender as TextBox;

            kirjautunutKäyttäjä.henkkohtviesti = client.changeSig(controller.username, controller.passu, s.Text).henkkohtviesti;
            //Lähetä uusi persmes palvelimelle, kunhan joku kirjoittaa rajapinnan tällaiselle tapahtumalle
        }

        private void StackPanel_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (e.ClickCount >= 2)
            {
                StackPanel panel = sender as StackPanel;

                string kaverinnimi = string.Empty;
                panel.Children.OfType<Label>().
                    Where(label => label.Name == "näyttönimi").
                        ForEach(label => kaverinnimi = label.Content.ToString());

                controller.avaaKeskustelu(kaverinnimi);
            }
        }

        private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            using (PääikkunanKokoasetukset asetukset = new PääikkunanKokoasetukset())
            {
                asetukset.MainWindowH = (int)Height;
                asetukset.MainWindowW = (int)Width;
            }
        }
    }
}
